package cn.csg.ams.collect2.poptopics.entity;

import lombok.Data;

import java.math.BigDecimal;
import java.util.Date;
import java.util.Optional;

/**
 * 召测数据
 */
@Data
public class LoadData {
    /**
     * 运行电能表标识
     */
    private String runMeterId;

    /**
     * 数据时间
     */
    private Date dataTime;

    /**
     * A相电压
     */
    private BigDecimal voltA;

    /**
     * B相电压
     */
    private BigDecimal voltB;

    /**
     * C相电压
     */
    private BigDecimal voltC;

    /**
     * A相电流
     */
    private BigDecimal currA;

    /**
     * B相电流
     */
    private BigDecimal currB;

    /**
     * C相电流
     */
    private BigDecimal currC;

    // /**
    //  * 通过负荷数据与接线方式判断是否停电，（true-停电，false-复电, null-未知接线方式）
    //  *
    //  * @param loadData 负荷数据
    //  * @param wiringMode 接线方式
    //  * @return Boolean
    //  */
    // public static Boolean isTd(LoadData loadData, String wiringMode) {
    //     if (wiringMode == null) {
    //         return null;
    //     }
    //
    //     // 根据接线方式判断是否停电
    //     switch (wiringMode) {
    //         // 单项 (6个值全部为零或null视为停电，否则视为复电)
    //         case "1":
    //             return checkValue(loadData.voltA) && checkValue(loadData.voltB) && checkValue(loadData.voltC) && checkValue(loadData.currA) && checkValue(loadData.currB) && checkValue(loadData.currC);
    //         // 三相二线 (A、C向电流电压4个值有一个为零或null视为停电，否则视为复电)
    //         case "2":
    //             return checkValue(loadData.voltA) || checkValue(loadData.voltC) || checkValue(loadData.currA) || checkValue(loadData.currC);
    //         // 三相四线 (6个值有一个为零或null视为停电，否则视为复电)
    //         case "3":
    //             return checkValue(loadData.voltA) || checkValue(loadData.voltB) || checkValue(loadData.voltC) || checkValue(loadData.currA) || checkValue(loadData.currB) || checkValue(loadData.currC);
    //         default:
    //             return null;
    //     }
    // }


    /**
     * 通过负荷数据与接线方式判断是否停电，（true-停电，false-复电, null-未知接线方式）
     *
     * @param voltA A相电压
     * @param voltB A相电压
     * @param voltC A相电压
     * @param currA A相电流
     * @param currB A相电流
     * @param currC A相电流
     * @param wiringMode 接线方式
     * @return Boolean
     */
    public static Optional<Boolean> isTd(BigDecimal voltA, BigDecimal voltB, BigDecimal voltC, BigDecimal currA, BigDecimal currB, BigDecimal currC, String wiringMode) {
        boolean b = checkValue(voltA) && checkValue(voltB) && checkValue(voltC) && checkValue(currA) && checkValue(currB) && checkValue(currC);
        return Optional.of(b);

        // if (wiringMode == null) {
        //     return Optional.empty();
        // }
        //
        // // 根据接线方式判断是否停电
        // switch (wiringMode) {
        //     // 单项 (6个值全部为零或null视为停电，否则视为复电)
        //     case "1":
        //         boolean b = checkValue(voltA) && checkValue(voltB) && checkValue(voltC) && checkValue(currA) && checkValue(currB) && checkValue(currC);
        //         return Optional.of(b);
        //     // 三相二线 (A、C向电流电压4个值有一个为零或null视为停电，否则视为复电)
        //     case "2":
        //         boolean b1 = checkValue(voltA) || checkValue(voltC) || checkValue(currA) || checkValue(currC);
        //         return Optional.of(b1);
        //     // 三相四线 (6个值有一个为零或null视为停电，否则视为复电)
        //     case "3":
        //         boolean b2 = checkValue(voltA) || checkValue(voltB) || checkValue(voltC) || checkValue(currA) || checkValue(currB) || checkValue(currC);
        //         return Optional.of(b2);
        //     default:
        //         return Optional.empty();
        // }
    }


    /**
     * 判断电流或电压的值是否为零或null
     *
     * @param value 电流或电压的值
     * @return boolean
     */
    private static boolean checkValue(BigDecimal value) {
        return value == null || BigDecimal.ZERO.compareTo(value) == 0;
    }

}
